#include <stdio.h>

void main(void)
{
    // struct 的复制
    // struct 变量可以使用赋值运算符（ = ），复制给另一个变量，
    // 这时会生成一个全新的副本。系统会分配一块新的内存空间，大小与原来的变量相同，把每个属性都复制过去，即原样生成了一份数据。
    // 这一点跟数组的复制不一样，务必小心 /
    struct cat
    {
        char name[5];
        int age;
    } a, b;

    a.name[0] = 'H';
    a.name[1] = 'u';
    a.name[2] = 'l';
    a.name[3] = 'a';
    a.name[4] = '\0';

    a.age = 3;

    b = a;
    b.name[0] = 'M';

    printf("%s\n", a.name); // Hula
    printf("%s\n", b.name); // Mula
    printf("-----------------\n");

    struct dog
    {
        char *name;
        short age;
    } c, d;

    c.name = "Hula";
    // 上面示例中，name属性变成了一个字符指针，这时a赋值给b，导致b.name也是同样的字符指针，指向同一个地址，也就是说两个属性共享同一个地址。
    d = c;
    printf("%s\n", c.name); // Hula
    printf("%s\n", d.name); // Mula
}